# -*- coding: utf-8 -*-
# @Author   : xiongjianwen
# @Time     : 2023/1/9 16:56
# @File     : new_platform_gcl.py
# @Project  : BwProCost_Auto_v1

from airtest.core.api import *
import uiautomation as auto
import logging

from uiautomation import Click, GridItemPattern, GridPattern, DragDrop

from utils.handle_hanshu import HANSHU

logger = logging.getLogger("airtest")
logger.setLevel(logging.ERROR)
auto_setup(__file__, devices=["Windows:///"])

# 进入工程量界面
def goto_gcl():
    touch(Template(r"../data/images/tpl1673254854155.png", record_pos=(0.031, -0.142), resolution=(3520, 1080)))

# 工程量界面
class NewPlat_Gcl:
    def __init__(self,project_name='变电站工程.zwzj - 博微电力建设计价通软件'):
        self.auto_window = auto.WindowControl(searchDepth=1, Name=project_name)
        self.hs = HANSHU(model_name='工程量') # 初始化公共函数
        self.left,self.top,self.right,self.bottom = self.hs.inner_windows.BoundingRectangle.left,self.hs.inner_windows.BoundingRectangle.top,self.hs.inner_windows.BoundingRectangle.right,self.hs.inner_windows.BoundingRectangle.bottom
        self.gcl_window_rect = (self.left,self.top,self.right,self.bottom)

    '''
    1、打开录入资源、插入（可读取excel，分定额、主材、设备插入），关闭录入资源（录入资源目前有问题）
    2、编辑物料（WBS编码，编码，项目名称，规格型号，单位，计算式）
    3、选择定额，编辑基本信息、材机列表
    4、切换到建筑余物清理（相同的操作，可以考虑用excel驱动）
    '''
    def goto_gcl_list(self,item):
        '''
        切换不同项目划分
        :param item: 变电站工程中有：变电建筑、建筑余物清理、变电安装、安装余物清理
        :return:
        '''
        gcl_item = self.hs.inner_windows.TabItemControl(Name=item)
        gcl_item.Click()


    def setValueOfText_gcl(self,text,title,value):
        """
        Tree控件都可以使用
        调用HANSHU中的公共函数
        :param text: 项目名称列的值
        :param title: 列头名称
        :param value: 赋值
        :return:
        """
        self.hs.setValueOfText_byTree(text,title,value)


    def getValueOfText_gcl(self,text,title):
        """
        调用公共函数，获取内容
        :param text: 定位的控件文本值
        :param title: 定位的列头名称
        :return: 有Name就取出来，没有就返回None
        """
        return self.hs.getValueOfText_byTree(text,title)


    def enterResource(self,text,resource_type,key_word):
        """
        F6打开录入资源窗口，通过输入resource_type来确认定额、主材、设备的资源类型，key_word搜索条件输入后，点击查询并插入，最后点击关闭按钮
        :param text: 工程量单元格中的值，如“一般土建”
        :param resource_type: 资源类型，有定额、主材、设备
        :param key_word: 搜索的关键词，可输入编码、名称、规格、首字母
        :return:
        """
        self.hs.inner_windows.TreeItemControl(Name=text).Click()
        keyevent('{F6}') # 快捷键打开录入资源
        resource_ctrl = auto.WindowControl(Name='资源录入')
        resource_title = resource_ctrl.TitleBarControl(Id='TitleBar') # 资源录入窗口的标题栏
        resource_ctrl.MoveToCenter() # 直接移动窗口到屏幕中间

        # resource_title_x_y = resource_title.GetPosition() # 或者通过计算坐标来移动到屏幕中间---不准确，分辨率不同会受影响
        # if resource_title_x_y != (950, 320): # 如果窗口不在屏幕中间，则将其拖拽到中间，否则不处理
        #     DragDrop(resource_title_x_y[0],resource_title_x_y[1],950,320) # 将窗口拖拽到屏幕(950,230)位置
        resource_type_ctrl = resource_ctrl.TabItemControl(Name=resource_type)
        resource_type_ctrl.Click()
        resource_ctrl.EditControl(ClassName='QLineEdit').DoubleClick() # 双击编辑框，变为全选状态，达到清空编辑框的效果
        keyevent('^a') # ctrl+a 全选
        resource_ctrl.EditControl(ClassName='QLineEdit').SendKeys(key_word)
        resource_ctrl.ButtonControl(Name='查询').Click()
        keyevent('Y')
        resource_ctrl.ButtonControl(Name='插入').Click()
        resource_title.ButtonControl(Name='关闭').Click() # 关闭窗口

    def select_ResouceOption(self,text,title):
        """
        根据选择的资源物料，选择基本信息选项，如点击GT1-1定额后，再点击下方的材机列表
        :param text: 工程量单元格的任意字段名
        :param title: 选项卡名
        :return:
        """
        self.hs.inner_windows.TreeItemControl(Name=text).Click() # 点击某个消耗量
        self.hs.inner_windows.TabItemControl(Name=title).Click() # 点击某个选项卡
        # self.jbxx_option.TabItemControl(Name=title).Click()  # 点击某个选项卡

    def setValueOfText_gcl_jbxx(self,text,value):
        """
        下方的基本信息选项卡的设置文本值
        :param text: 选择的选项卡下的字段名
        :param value: 要设置的字段值
        :return:
        """
        self.jbxx_option = self.hs.inner_windows.TabControl(Name='基本信息')
        self.hs.setValueOfText_byData(text, value)

    def getValueOfText_gcl_jbxx(self,text):
        """
        获取下方基本信息选项卡的文本值
        :param text: 选择的选项卡下的字段名
        :return: 返回text字段后的值
        """
        return self.hs.getValueOfText_byData(text)
        # jbxx_table_ctrl = self.jbxx_option.GetPreviousSiblingControl()  # 基本信息选项卡的前一个控件，就是表格控件
        # return jbxx_table_ctrl.DataItemControl(Name=text).GetNextSiblingControl().Name

if __name__ == '__main__':
    # goto_gcl()
    np = NewPlat_Gcl()
    # np.goto_gcl_list('变电安装')
    # np.setValueOfText_gcl('一般土建',1,'规格型号测试')
    # np.setValueOfText_gcl('一般土建',-1,'test_code1')
    # np.setValueOfText_gcl('一般土建',10,'备注测试')
    # np.setValueOfText_gcl('一般土建',0,'一般土建2')
    # print(np.getValueOfText_gcl('一般土建2', 1, ))
    # print(np.getValueOfText_gcl('GT1-1', 1, ))
    # 录入资源
    # np.enterResource('一般土建','定额','GT1-1')
    # np.enterResource('一般土建','定额','GT1-2')
    # np.select_ResouceOption('GT7-7','基本信息')
    # np.setValueOfText_gcl_jbxx('人工费','223.55')
    # np.setValueOfText_gcl_jbxx('材料费','755.6')
    # np.setValueOfText_gcl_jbxx('机械系数','2')
    # np.select_ResouceOption('GD2-3', '材机列表')
    # np.setValueOfText_gcl('9101108','名称','测试材机列表名称修改')
    # np.select_ResouceOption('GD2-5', '材机列表')
    # np.setValueOfText_gcl('9101109',1,'测试材机列表名称修改')
    print(np.getValueOfText_gcl_jbxx('人工费'))